/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package docmanager.operation.usuarios;

import bf.*;
import bf.operation.Operation;
import bf.operation.OperationException;
import bf.utils.Util;
import docmanager.business.objects.Usuario;
import docmanager.db.ConnectionPool;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author Juan Lucas
 */
public class OpAgregarUsuario2 extends Operation
{

    String returnURL = "DMController?op=ListarUsuarios";
    
    public Map execute(HttpServletRequest request) throws OperationException
    {
    	Map m = new HashMap();
    	m.put("limitado", request.getParameter("limitado"));
    	String login = request.getParameter("login");
        String clave = request.getParameter("clave");
        String[] rol = request.getParameterValues("rol");
        int[] roles = null;
        if (rol != null)
        	roles = Util.toIntArray(rol);
        else
        {
            this.returnURL = "DMController?op=AgregarUsuario1";
            m.put("mensaje", "<h2>El usuario debe tener algun rol.</h2>");
            return m;                        	
        }
        
        Connection conn = null;
        try
        {
            conn = ConnectionPool.getConnection();
        } catch (SQLException sQLException)
        {
            sQLException.printStackTrace();
            throw new OperationException();
        }
        // Si el login ya existe, cancelar todo.
        try
        {
            conn.setAutoCommit(false);
            System.out.println("OpAgregarUsuario2: chequeando existencia usuario");
            if (Usuario.existeUsuario(conn, login))
            {
                conn.setAutoCommit(true);
                this.returnURL = "DMController?op=AgregarUsuario1";
                m.put("mensaje", "<h2>Usuario ya existente</h2>");
                ConnectionPool.closeConn(conn);
                return m;                
            }
            // Agregamos el usuario.
            // Ojo que debe estar todo hecho en el contexto de una TRANSACCION.
            // Modificar el DataAccess para tener esto en cuenta.
            Usuario u = new Usuario(login, clave);
            u.guardarNuevo(conn);
            System.out.println("OpAgregarUsuario2: usuario agregado");
            // Necesitamos alguna forma de obtener el id guardado.
            // El executeUpdate debe servir para eso.
            //System.out.println("Los roles son: " + roles);       
            // Solucion temporal, sacamos al usuario por el login.
            u = new Usuario(conn, login);
            int id_usuario = u.getId();
            System.out.println("OpAgregarUsuario2: agregando los roles");
            for (int i = 0; i < roles.length; i++)
            {
                String query = "INSERT INTO usuarios_roles(id_usuario,id_rol) "
                        + "values(" + id_usuario + "," + roles[i] + ")";
                DataAccess.dmlQueryStatic(conn, query);
            }
            System.out.println("OpAgregarUsuario2: roles agregados, listo para el commit.");
            conn.commit();
            conn.setAutoCommit(true);
            ConnectionPool.closeConn(conn);
        } catch (SQLException sQLException)
        {
            sQLException.printStackTrace();
            throw new OperationException();            
        }
        m.put("mensaje", "<h2>Usuario agregado con exito</h2>");
        return m;
        
    }

    
    public String getReturnURL()
    {
       return returnURL; 
    }
    
}



// El DataAccess como objeto pasara a estar en desuso, lo importante
// es que permita generar conexiones.
// El otro uso es ejecutar queries de la forma estatica, asi se habilitan
// las transacciones.

